当前位置:  开发笔记 > 编程语言 > 正文

是否存在`==`为真但`equals`为假的情况?

如何解决《是否存在`==`为真但`equals`为假的情况?》经验,为你挑选了1个好方法。

在标准Java API中,是否存在==将返回trueequals将返回的任何方案false.理论上,这可以写入用户定义的类,而非常像这样

class A {
    public boolean equals(Object o) {
        return this != o;
    }
}

是否有在示例,其中一些对象的任何实际烤bc,b == c将返回true,但b.equals(c)回报false?此外,有这样的行为会有任何可能的好处吗?



1> Afforess..:

没有*.

合同equals有5个规则,第一个涵盖了这个案例:

equals方法在非null对象引用上实现等价关系:

它是自反的:对于任何非空引用值x,x.equals(x)应该返回true.

它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true.

它是传递性的:对于任何非空引用值x,y和z,如果x.equals(y)返回true而y.equals(z)返回true,则x.equals(z)应返回true.

它是一致的:对于任何非空引用值x和y,x.equals(y)的多次调用始终返回true或始终返回false,前提是不修改在对象的equals比较中使用的信息.

对于任何非空引用值x,x.equals(null)应返回false.

Java标准库中违反自反性的任何对象都是错误,如果您确实在API中发现了这样的对象,请将其报告给Oracle.

*第三方图书馆可以说较少.开发人员犯错误或对equals合同一无所知.通常,这也可以作为第三方库中的错误,但是YMMV.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有